--- 模块功能：ST 7789驱动芯片LCD命令配置
-- @author openLuat
-- @module ui.color_std_spi_st7789
-- @license MIT
-- @copyright openLuat
-- @release 2018.08.14

--[[
    注意：disp库目前支持I2C接口和SPI接口的屏，此文件的配置，硬件上使用的是标准的SPI引脚，不是LCD专用的SPI引脚
    硬件连线图如下：
        Air模块 LCD
            GND      -- 地
            SPI_CS   -- 片选
            SPI_CLK  -- 时钟
            SPI_DO   -- 数据
            SPI_DI   -- 数据/命令选择
            VDDIO    -- 电源
            UART1_CTS-- 复位
    注意：Air202早期的开发板，UART1的CTS和RTS的丝印反了
]]

module(..., package.seeall)
require "pins"

--[[
    函数名：init
    功能  ：初始化LCD参数
    参数  ：无
    返回值：无
]]

function init()
    local para = {
        width   = 240               , -- 分辨率宽度，240像素；用户根据屏的参数自行修改
        height  = 240               , -- 分辨率高度，240像素；用户根据屏的参数自行修改
        bpp     = 16                , 
        bus     = disp.BUS_SPI4LINE , 
        xoffset = 0                 , -- X轴偏移
        yoffset = 0                 , -- Y轴偏移
        freq    = 13000000          , -- spi时钟频率，支持110K到13M（即110000到13000000）之间的整数（包含110000和13000000）
        pinrst  = pio.P0_6          , -- reset，复位引脚
        pinrs   = pio.P0_1          , -- rs，命令/数据选择引脚
        --初始化命令
        --前两个字节表示类型：0001表示延时，0000或者0002表示命令，0003表示数据
        --延时类型：后两个字节表示延时时间（单位毫秒）
        --命令类型：后两个字节命令的值
        --数据类型：后两个字节数据的值
        initcmd = {
            0x00020036, 0x00030000, 0x0002003A, 0x00030005, 0x000200B2,
            0x0003000C, 0x0003000C, 0x00030000, 0x00030033, 0x00030033,
            0x000200B7, 0x00030035, 0x000200BB, 0x00030019, 0x000200C0,
            0x0003002C, 0x000200C2, 0x00030001, 0x000200C3, 0x00030012,
            0x000200C4, 0x00030020, 0x000200C6, 0x0003000F, 0x000200D0,
            0x000300A4, 0x000300A1, 0x000200E0, 0x000300D0, 0x00030004,
            0x0003000D, 0x00030011, 0x00030013, 0x0003002B, 0x0003003F,
            0x00030054, 0x0003004C, 0x00030018, 0x0003000D, 0x0003000B,
            0x0003001F, 0x00030023, 0x000200E1, 0x000300D0, 0x00030004,
            0x0003000C, 0x00030011, 0x00030013, 0x0003002C, 0x0003003F,
            0x00030044, 0x00030051, 0x0003002F, 0x0003001F, 0x0003001F,
            0x00030020, 0x00030023,
            0x00020021, -- 如果发现屏幕反色，注释掉此行
            0x00020011, 0x00010078, 0x00020029
        },
        --休眠命令
        sleepcmd = {0x00020010},

        --唤醒命令
        wakecmd = {0x00020011}
    }
    disp.init(para)
    disp.clear()
    disp.update()
end

pmd.ldoset(11, pmd.LDO_VLCD)

init()

-- 打开背光
-- 实际使用时，用户根据自己的lcd背光控制方式，添加背光控制代码
